home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Multimedia / PlayerPRO 4.5.5 Dev.Kit / Plug-Ins / Instruments Import⁄Export Plugs / SndUtils.c < prev    next >
Text File  |  1996-07-01  |  3KB  |  155 lines

  1. /********************                        ***********************/
  2. //
  3. //    Player PRO 4.5x --    Usefull functions for sound file import/export
  4. //
  5. //    Version 3.0
  6. //
  7. //    To use with PlayerPRO & CodeWarrior ( current vers 8)
  8. //
  9. //    Antoine ROSSET
  10. //    16 Tranchees
  11. //    1206 GENEVA
  12. //    SWITZERLAND
  13. //    
  14. //    FAX:            (+41 22) 346 11 97
  15. //    Compuserve:        100277,164
  16. //    Phone:            (+41 79) 203 74 62
  17. //    Internet:         rosset@dial.eunet.ch
  18. /********************                        ***********************/
  19.  
  20. #include "PPPlug.h"
  21. #include "sound.h"
  22.  
  23. void ConvertInstrumentIn( register    Byte    *tempPtr,    register long sSize)
  24. {
  25.     register    Byte            val = 0x80;
  26.  
  27.     while( sSize > 0)
  28.     {
  29.         sSize--;
  30.         *(tempPtr + sSize) -= val;
  31.     }
  32. }
  33.  
  34. Ptr MyExp1to3( Ptr sound, unsigned long numSampleFrames)
  35. {
  36. long    i;
  37. Ptr        inState, outState;
  38. Ptr        outBuffer;
  39.  
  40.     outState = NewPtrClear( 128);
  41.     inState = NewPtrClear( 128);
  42.     if( inState == nil) return 0L;
  43.     
  44.     outBuffer = NewPtr( numSampleFrames*6);
  45.     if( outBuffer == nil) return 0L;
  46.     
  47.     Exp1to3( sound, outBuffer, numSampleFrames, (StateBlockPtr) inState, (StateBlockPtr) outState, 1, 1);
  48.  
  49.     DisposPtr( sound);
  50.     sound = outBuffer;
  51.     
  52.     DisposPtr( inState);
  53.     DisposPtr( outState);
  54.  
  55.     return sound;
  56. }
  57.  
  58. Ptr MyExp1to6( Ptr sound, unsigned long numSampleFrames)
  59. {
  60. long    i;
  61. Ptr        inState, outState;
  62. Ptr        outBuffer;
  63.  
  64.     outState = NewPtrClear( 128);
  65.     inState = NewPtrClear( 128);
  66.     if( inState == nil) return 0L;
  67.     
  68.     outBuffer = NewPtr( numSampleFrames * 6);
  69.     if( outBuffer == nil)  return 0L;
  70.     
  71.     Exp1to6( sound, outBuffer, numSampleFrames, (StateBlockPtr) inState, (StateBlockPtr) outState, 1, 1);
  72.     
  73.     DisposPtr( sound);
  74.     sound = outBuffer;
  75.     
  76.     DisposPtr( inState);
  77.     DisposPtr( outState);
  78.  
  79.     return sound;
  80. }
  81.  
  82. sData    * MADCreateSample()
  83. {
  84.     sData    *curData;
  85.  
  86.     curData = (sData*) NewPtrClear( sizeof( sData));
  87.     
  88.     curData->size        = 0L;
  89.     curData->loopBeg    = 0L;
  90.     curData->loopSize    = 0L;
  91.     curData->vol        = MAX_VOLUME;
  92.     curData->c2spd        = NOFINETUNE;
  93.     curData->loopType    = 0;
  94.     curData->amp        = 8;
  95.     curData->panning    = 0;
  96.     curData->relNote    = 0;
  97.     curData->data        = 0L;
  98.     
  99.     return curData;        
  100. }
  101.  
  102. OSErr AddSoundToMAD(    Ptr                theSound,
  103.                         long            lS,
  104.                         long            lE,
  105.                         short            sS,
  106.                         short            bFreq,
  107.                         unsigned long    rate,
  108.                         Str255            name,
  109.                         InstrData        *InsHeader,                    // Ptr on instrument header
  110.                         sData            **sample,                    // Ptr on samples data
  111.                         short            *sampleID)
  112. {
  113.     long     inOutBytes, i;
  114.     sData    *curData;
  115.  
  116.     if( theSound == 0L) return MADParametersErr;
  117.  
  118.     if( *sampleID > MAXSAMPLE) return MADParametersErr;
  119.  
  120.     inOutBytes = GetPtrSize( theSound);
  121.     
  122.     ///////
  123.     
  124.     if( *sampleID >= 0)        // replace this sample
  125.     {
  126.         curData = sample[ *sampleID];
  127.     }
  128.     else                    // add a sample : why? because *sampleID == -1
  129.     {
  130.         *sampleID = InsHeader->numSamples;
  131.         InsHeader->numSamples++;
  132.         
  133.         curData = sample[ *sampleID] = MADCreateSample();
  134.     }
  135.     
  136.     if( curData->data != 0L) DisposPtr( curData->data);
  137.     curData->data = theSound;
  138.     
  139.     curData->size        = inOutBytes;
  140.     curData->loopBeg    = lS;
  141.     curData->loopSize    = lE - lS;
  142.     curData->vol        = 64;
  143.     curData->amp        = sS;
  144.     curData->c2spd        = rate >> 16L;
  145.     curData->relNote    = 60 - bFreq;
  146.     
  147.     for(i=0; i<32; i++)
  148.     {
  149.         if( i < name[ 0]) curData->name[i] = name[i+1];
  150.         else curData->name[i] = '\0';
  151.     }
  152.     
  153.     return noErr;
  154. }
  155.